package com.javaclimb.music.datastructure;

/**
 * 用类封装数组实现数据结构
 */
public class MyArray {
//    定义一个数组容器
    private int[] intArray;
//    定义一个数组有效长度
    private int elems;
//    最大长度
    private int length;
    public MyArray(){
        elems=0;
        length=50;
        intArray=new int[length];
    }

    public MyArray(int length){
        elems=0;
        this.length=length;
        intArray=new int[length];
    }
//    获取数组的有效长度
    public int getElems(){
        return this.elems;
    }

    public void display(){
        for(int i=0;i<elems;i++){
            System.out.println(intArray[i]+" ");
        }
        System.out.println();
    }

    public boolean add(int value){
        if(elems<length){
            intArray[elems]=value;
            elems++;
            return true;
        }
        return false;
    }

//    根据下标获取元素
    public int getValue(int i){
        if (i<0 || i>=length){
            System.out.println("没有此元素");
        }else {
            return intArray[i-1];
        }
        return 0;
    }

//    查找元素:如果要查询的元素存在就返回他的下标，如果不存在返回-1
    public int find(int value){
        int i;
        for (i=0;i<elems;i++){
            if (value==intArray[i]){
                break;
            }
        }
        return i;
    }

//    删除元素
    public boolean delete(int value){
        int i=find(value);
        if (i==-1){
            System.out.println("要删除的数据不存在");
            return false;
        }else {
            if (i==elems-1){
                elems--;
                intArray[i]=0;
            }else {
                for (int a=i;a<elems-1;a++){
                    intArray[a]=intArray[a+1];
                }
                elems--;
            }
            return true;
        }
    }

//    修改元素
    public boolean modify(int old,int newValue){
        int i=this.find(old);
        if (i==-1){
            System.out.println("要修改的数据不存在");
            return false;
        }else {
            intArray[i]=newValue;
            return true;
        }
    }

    public static void main(String[] args) {
        MyArray myArray=new MyArray(10);
        if (myArray.add(12) && myArray.add(19) && myArray.add(13) && myArray.add(21) && myArray.add(18)){
            System.out.println("添加成功");
        }else {
            System.out.println("添加失败");
        }
        myArray.display();
        System.out.println(myArray.getElems());
        myArray.delete(12);
        myArray.modify(13,133);
        myArray.display();
        System.out.println(myArray.getElems());
//        System.out.println(myArray.getValue(1));
//        System.out.println(myArray.find(19));
    }
}
